package com.jf3q.front.controller;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.jf3q.common.vo.ResultVo;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * @author ASUS
 * @date 2024/4/16
 * @apiNote
 */
@RestController
public class UploadController {

    @Value("${ali.endpoint}")
    private String endpoint;
    @Value("${ali.endpoint2}")
    private String endpoint2;
    @Value("${ali.bucketName}")
    private String bucketName;
    @Value("${ali.accessKeyId}")
    private String accesskeyId;
    @Value("${ali.secretAccessKey}")
    private String secretAccesskey;

    @PostMapping("/upload/{type}")
    @Operation(summary = "上传接口")
    public ResultVo upload(@PathVariable String type, MultipartFile file) {
        if (file == null || file.isEmpty()) {
            return ResultVo.error("文件必填");
        }

        String originalFilename = file.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));

        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
        String dataPath = format.format(new Date());

        String fileName = dataPath + "/" + UUID.randomUUID().toString().replace("-", "") + suffix;

        StringBuffer objectName = new StringBuffer();
        switch (type) {
            case "avatar":
            case "video":
            case "cover":
                objectName.append(type + "/");
                break;
            default:
                return ResultVo.error("参数不对");
        }

        objectName.append(fileName);
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accesskeyId, secretAccesskey);

        try {
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName.toString(), file.getInputStream());

            // 上传文件。
            PutObjectResult result = ossClient.putObject(putObjectRequest);

            String url = "https://" + bucketName + "." + endpoint2 + "/" + objectName;

            System.out.println(url);

            //拿到最终上传成功的url

            return ResultVo.success(url);
        } catch (Exception e) {
            return ResultVo.error("上传阿里云失败");
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

}
